package com.chatmcp.mcprouter.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * 数据库工具类
 * 提供数据库初始化和连接管理功能
 */
@Slf4j
@Component
public class DatabaseUtil {

    private final DataSource dataSource;
    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public DatabaseUtil(DataSource dataSource, JdbcTemplate jdbcTemplate) {
        this.dataSource = dataSource;
        this.jdbcTemplate = jdbcTemplate;
    }

    /**
     * 初始化指定名称的数据库
     *
     * @param dbName 数据库名称
     * @return 是否初始化成功
     */
    public boolean initDatabase(String dbName) {
        if (dbName == null || dbName.isEmpty()) {
            log.error("数据库名称不能为空");
            return false;
        }

        try (Connection connection = dataSource.getConnection()) {
            log.info("成功连接到数据库: {}", dbName);
            
            // 可以在这里执行数据库初始化脚本
            // 例如创建表格、索引等
            
            return true;
        } catch (SQLException e) {
            log.error("连接数据库失败: {}", e.getMessage());
            return false;
        }
    }

    /**
     * 检查数据库连接是否可用
     *
     * @return 是否可用
     */
    public boolean isConnectionAvailable() {
        try (Connection connection = dataSource.getConnection()) {
            return connection.isValid(5); // 5秒超时
        } catch (SQLException e) {
            log.error("检查数据库连接失败: {}", e.getMessage());
            return false;
        }
    }

    /**
     * 执行数据库初始化SQL脚本
     *
     * @param sql SQL脚本
     * @return 是否执行成功
     */
    public boolean executeScript(String sql) {
        try {
            jdbcTemplate.execute(sql);
            return true;
        } catch (Exception e) {
            log.error("执行SQL脚本失败: {}", e.getMessage());
            return false;
        }
    }
} 